package com.goldgov.distancelearning.service;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.goldgov.conference.service.ConferenceStat;
import com.goldgov.conference.service.ConferenceStatQuery;

public interface DistancelearningService {
	
	
	/**
	 * 预新增
	 * @date 2018年6月21日 下午4:31:56 
	 * @author hanxiangyu
	 * @return
	 */
	public Distancelearning preAdd();
	/**
	 * 新增远程教育记录
	 * @param distancelearning
	 * @return
	 */
	public Boolean addDistancelearning(Distancelearning distancelearning);
	/**
	 * 新增远程教育记录
	 * @param distancelearning
	 * @return
	 */
	public Boolean addDistancelearningUser(Distancelearning distancelearning);
	
	/**
	 * 获取远程教育记录
	 * @param query
	 * @return
	 */
	public List<Distancelearning> getDistancelearningList(@Param("query") DistancelearningQuery query);
	/**
	 * 获取远程教育记录
	 * @param query
	 * @return
	 */
	List<Distancelearning> getDisStatList(DistancelearningQuery query);
	/**
	 * 获取出席人列表
	 * @date 2018年6月21日 下午6:10:53 
	 * @author hanxiangyu
	 * @param query
	 * @return
	 */
	public List<DistancelearningUser> getDistancelearningUserList(DistancelearningUserQuery query);
	

	/**
	 * 获取已存在人的ids
	 * @date 2018年6月21日 下午6:37:16 
	 * @author hanxiangyu
	 * @param distancelearningID
	 * @return
	 */
	public List<String> getJoinUserIDs(String distancelearningID);
	/**
	 * 获取会议详情
	 * @date 2018年6月21日 下午7:10:20 
	 * @author hanxiangyu
	 * @param distancelearning
	 * @return
	 */
	public Distancelearning getDistaanceByID(Distancelearning distancelearning);
	/**
	 * 获取会议信息
	 * @date 2018年6月21日 下午7:10:20 
	 * @author hanxiangyu
	 * @param distancelearning
	 * @return
	 */
	public Distancelearning getDisByID(String disId);
	
	/**
	 * 获取已存在的数据
	 * @date 2018年6月21日 下午7:30:59 
	 * @author hanxiangyu
	 * @param distancelearning
	 * @return
	 */
	public List<DistancelearningUser> getExistJoinUserList(Distancelearning distancelearning);
	
	/**
	 * 删除人员存在人员之外的其他人
	 * @date 2018年6月22日 上午9:25:47 
	 * @author hanxiangyu
	 * @param distancelearningUser
	 * @return
	 */
	public Boolean deleteJoinUser(DistancelearningUser distancelearningUser);
	
	/**
	 * 更新远程教育会议情况
	 * @date 2018年6月22日 上午10:13:10 
	 * @author hanxiangyu
	 * @param distancelearning
	 * @return
	 */
	public Boolean updateDistancelearning(Distancelearning distancelearning);
	
	/**
	 * 发布撤销操作
	 * @date 2018年6月22日 上午11:21:22 
	 * @author hanxiangyu
	 * @param distancelearning
	 * @return
	 */
	public Boolean publishDistancelearning(Distancelearning distancelearning);
	
	/**
	 * 获取课件列表
	 * @date 2018年6月22日 下午2:18:19 
	 * @author hanxiangyu
	 * @param query
	 * @return
	 */
	List<DistancelearningCourse> getDistancelearningCourseList(DistancelearningCourseQuery query);
	/**
	 * 新增
	 * @date 2018年6月22日 下午2:19:09 
	 * @author hanxiangyu
	 * @param distancelearningCourse
	 * @return
	 */
	public Boolean addDistancelearningCourse(Distancelearning distancelearning);
	
	/**
	 * 获取已经存在的课件id
	 * @date 2018年6月22日 下午2:55:04 
	 * @author hanxiangyu
	 * @param distancelearningID
	 * @return
	 */
	public List<String> getAllCourseIds(String distancelearningID);
	/**
	 * 回执操作
	 * @date 2018年6月23日 上午9:58:25 
	 * @author hanxiangyu
	 * @param distancelearningUser
	 * @return
	 */
	public Boolean disReceipt(DistancelearningUser distancelearningUser);
	
	/**
	 * 添加考勤记录
	 * @date 2018年6月23日 上午9:38:13 
	 * @author hanxiangyu
	 * @param distancelearningAttendance
	 * @return
	 */
	public Boolean addDisAttendance(DistancelearningAttendance distancelearningAttendance);
	/**
	 * 删除考勤记录
	 * @date 2018年6月23日 上午9:39:23 
	 * @author hanxiangyu
	 * @param distancelearningAttendance
	 * @return
	 */
	public Boolean deleteDisAttendance(DistancelearningAttendance distancelearningAttendance);
	/**
	 * 修改考勤记录
	 * @date 2018年6月23日 上午9:39:38 
	 * @author hanxiangyu
	 * @param distancelearningAttendance
	 * @return
	 */
	public Boolean updateDisAttendance(DistancelearningAttendance distancelearningAttendance);
	
	/**
	 * 获取考勤记录
	 * @date 2018年6月26日 上午11:41:52 
	 * @author hanxiangyu
	 * @param distancelearningAttendance
	 * @return
	 */
	List<DistancelearningAttendance> getDisAttendance(DistancelearningAttendance distancelearningAttendance);
	
	
	/**
	 * 获取出席人list
	 * @date 2018年6月29日 下午3:04:46 
	 * @author hanxiangyu
	 * @param distancelearningID
	 * @return
	 */
	List<DistancelearningUser> getHeadList(String distancelearningID);
	/**
	 * 获取请假人员list
	 * @date 2018年6月29日 下午3:05:18 
	 * @author hanxiangyu
	 * @param distancelearningID
	 * @return
	 */
	List<DistancelearningUser> getLeaveList(String distancelearningID);
	/**
	 * 获取考勤人员list
	 * @date 2018年6月29日 下午3:05:37 
	 * @author hanxiangyu
	 * @param distancelearningID
	 * @return
	 */
	List<DistancelearningUser> getSingList(String distancelearningID);
	/**
	 * 获取未考勤人员list
	 * @date 2018年6月29日 下午3:06:14 
	 * @author hanxiangyu
	 * @param distancelearningID
	 * @return
	 */
	List<DistancelearningUser> getDefaultList(String distancelearningID);
	
	
	/**
	 * 同级党支部统计
	 * @date 2018年6月29日 下午5:07:20 
	 * @author hanxiangyu
	 * @param query
	 * @return
	 */
	public List<Distancelearning> getDisVisStatList(DistancelearningQuery query);
	
	/**
	 * 更新录像id
	 * @date 2018年7月4日 下午6:18:44 
	 * @author hanxiangyu
	 * @param distancelearning
	 * @return
	 */
	int updateDisById(Distancelearning distancelearning);
	
	/**
	 * 获取远程教育记录
	 * @param query
	 * @return
	 */
	List<Distancelearning> getDistancelearningByAdminList(DistancelearningQuery query);
	
	/**
	 * 根据多个id获取多个记录
	 * @date 2018年7月4日 下午8:02:46 
	 * @author hanxiangyu
	 * @param ids
	 * @return
	 */
	public List<Distancelearning> getDisListByIds(String[] ids);
	

	/**
	 * 管理员获取录播列表
	 * @param query
	 * @return
	 */
	public List<Distancelearning> getLBListByAdmin(DistancelearningQuery query);
	/**
	 * 前台获取获取录播列表
	 * @param query
	 * @return
	 */
	public List<Distancelearning> getLBList(DistancelearningQuery query);
	
	/**
	 * 更新直播信息
	 * @date 2018年7月6日 下午6:45:57 
	 * @author hanxiangyu
	 * @param distancelearning
	 * @return
	 */
	public Boolean updateLiveStatus(Distancelearning distancelearning);
	
	/**
	 * 获取直播间id
	 * @date 2018年7月9日 下午3:08:11 
	 * @author hanxiangyu
	 * @return
	 */
	Integer getMaxLiveId();
	/**
	 * 获取失效的直播间id
	 * @date 2018年7月9日 下午3:08:41 
	 * @author hanxiangyu
	 * @return
	 */
	Integer getLiveId();
	/**
	 * 根据直播间id查询会议记录
	 * @date 2018年7月19日 下午6:27:09 
	 * @author hanxiangyu
	 * @param liveId
	 * @return
	 */
	Distancelearning getDisByLiveId(@Param("liveId")Integer liveId);
	
	/**
	 * 获取远程教育直播记录
	 * @param query
	 * @return
	 */
	List<Distancelearning> getDisLiveByAdminList(@Param("query") DistancelearningQuery query);
	
	
	/**
	 * 随机获取记录数
	 * @param query
	 * @return
	 */
	List<Distancelearning> getRandomDis(DistancelearningBean disBean);
	/**
	 * 随机获取记录数
	 * @param query
	 * @return
	 */
	List<Distancelearning> getLBRandomDis(DistancelearningBean disBean);
	
	/**
	 * 手动开启结束会议
	 * @date 2018年7月24日 下午9:10:43 
	 * @author hanxiangyu
	 * @param disBean
	 * @return
	 */
	public Boolean startAndEndDis(DistancelearningBean disBean);
	/**
	 * 获取远程教育记录
	 * @param query
	 * @return
	 */
	List<Distancelearning> getDisListMobile(@Param("query") DistancelearningQuery query);
	
	/**
	 * 获取录播数量
	 * @date 2018年8月1日 下午11:11:45 
	 * @author hanxiangyu
	 * @param disBean
	 * @return
	 */
	int getLBCountRandomDis(DistancelearningBean disBean);
	/**
	 * 获取直播数量
	 * @date 2018年8月1日 下午11:11:45 
	 * @author hanxiangyu
	 * @param disBean
	 * @return
	 */
	int getCountRandomDis(DistancelearningBean disBean);
	
	/**
	 * 根据支部id获取远程教育记录
	 * @param query
	 * @return
	 */
	List<Distancelearning> getDisListByOrgId(DistancelearningQuery query);
	
	/**
	 * 根据code获取组织结构id
	 * @param scopeCode
	 * @return
	 */
	String getOrgIdByCode(String scopeCode);
	
	/**
	 * 统计会议次数和时长
	 * @date 2018年8月21日10:32:56
	 * @author lsg
	 */
	List<DistancelearningCountBean> countTimesAndLength(DistancelearningQuery query);
	
	/**
	 * 查询机构下会议列表
	 * @date 2018年8月23日10:32:56
	 * @author lsg
	 */
	List<Distancelearning> findDistancelearningListByOrgId(DistancelearningQuery query);
	
	/**
	 * 按时间统计会议次数
	 * @date 2018年8月24日17:22:41
	 * @author lsg
	 */
	List<DistancelearningCountBean> countTimesByTime(DistancelearningQuery query);
	
	/**
	 * 查询机构下最下级机构数量
	 * @date 2018年8月24日17:22:46
	 * @author lsg
	 */
	int countOrgNumByOrgId(String orgId);
	
	/**
	 * 查询会议下是否存在党员
	 * @date 2018年11月15日 上午10:13:09 
	 * @author hanxiangyu
	 * @param distancelearningUser
	 * @return
	 */
	List<DistancelearningUser> getJoinUserByUserIds(DistancelearningUser distancelearningUser);
	
	List<DistancelearningAttendance> getDisAttendanceByUserIdsList(DistancelearningAttendance distancelearningAttendance);
	
	/**
	 * 各地区总体会议完成度
	 * @param query
	 * @return
	 * @throws Exception
	 */
	List<Distancelearning> countDistancelearningPercentageRegion(DistancelearningQuery query) throws Exception;
	
	/**
	 * 会议平均完成度
	 * @param query
	 * @return
	 * @throws Exception
	 */
	List<Distancelearning> countDistancelearningPercentageAvg(DistancelearningQuery query) throws Exception;
	
	/**
	 * 各地区会议完成机构
	 * @param query
	 * @return
	 * @throws Exception
	 */
	List<Distancelearning> countDistancelearningFinishOrg(DistancelearningQuery query) throws Exception;
	
	/**
	 * 会议材料数量分布
	 * @param query
	 * @return
	 */
	List<Distancelearning> countDistancelearningAttachPercentage(DistancelearningQuery query);
	
	/**
	 * 会议完成数量占比
	 * @param query
	 * @return
	 * @throws Exception
	 */
	List<ConferenceStat> countDistancelearningPercentageBynum(ConferenceStatQuery query) throws Exception;
}
